package com.example.deepschool.service.CourseResource;

import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

/**
 * 课程资源服务接口，提供课程资源的检查、删除、查询、分片上传和临时下载链接生成等功能。
 */
public interface CourseResource {
	
	/**
	 * 检查课程资源是否已存在。
	 *
	 * @param intactSHA256 完整文件的SHA256校验码。
	 * @param ResourceName 资源名称。
	 * @param courseID     课程ID。
	 * @param UUID         Token
	 * @return 返回一个Map，包含检查结果和其他相关信息。
	 */
	
	Map<String, Object> isExist (String intactSHA256,
	                             String ResourceName,
	                             Long courseID,
	                             String UUID);
	
	/**
	 * 删除指定课程下的资源。
	 *
	 * @param courseID         课程ID。
	 * @param courseResourceId 资源ID。
	 * @param UUID             Token
	 */
	void deleteCourseResource (Long courseID, Long courseResourceId, String UUID);
	
	/**
	 * 根据课程ID查询课程资源。
	 *
	 * @param courseId 课程ID。
	 * @param UUID     资源的唯一标识符。
	 * @return 返回符合条件的课程资源数组。
	 */
	com.example.deepschool.Model.CourseResource[] CourseResourceByCourseId (Long courseId, String UUID);
	
	/**
	 * 上传资源的分片，并合并到完整的资源。
	 *
	 * @param ChunkFile    分片文件。
	 * @param intactSHA256 完整文件的SHA256校验码。
	 * @param ChunkSHA256  分片的SHA256校验码。
	 * @param ChunkNum     当前分片编号。
	 * @param MaxChunkNum  最大分片编号。
	 * @param ResourceName 资源名称。
	 * @param courseID     课程ID。
	 * @param UUID         Token
	 * @return 返回一个Map，包含分片上传的结果和其他相关信息。
	 */
	Map<String, Object> putChunk (MultipartFile ChunkFile,
	                              String intactSHA256,
	                              String ChunkSHA256,
	                              Long ChunkNum,
	                              Long MaxChunkNum,
	                              String ResourceName,
	                              Long courseID,
	                              String UUID);
	
	/**
	 * 生成资源的临时下载链接。
	 *
	 * @param courseId     课程ID。
	 * @param ResourceName 资源名称。
	 * @param address      资源的存储地址。
	 * @param UU_ID        用户的唯一标识符。
	 * @return 返回一个Map，包含临时下载链接和其他相关信息。
	 */
	Map<String, Object> TempDownloadLink (Long courseId,
	                                      String ResourceName,
	                                      String address,
	                                      String UU_ID);
}
